//========================================================================
//
// Stream-CCITT.h
//
// Tables for CCITT Fax decoding.
//
// Copyright 1996-2003 Glyph & Cog, LLC
//
//========================================================================

//========================================================================
//
// Modified under the Poppler project - http://poppler.freedesktop.org
//
// All changes made under the Poppler project to this file are licensed
// under GPL version 2 or later
//
// Copyright (C) 2008 Albert Astals Cid <aacid@kde.org>
//
// To see a description of the changes please see the Changelog file that
// came with your tarball or type make ChangeLog if you are building from git
//
//========================================================================

#ifndef STREAM_CCITT_H
#define STREAM_CCITT_H

struct CCITTCode
{
    short bits;
    short n;
};

#define ccittEOL -2

//------------------------------------------------------------------------
// 2D codes
//------------------------------------------------------------------------

#define twoDimPass 0
#define twoDimHoriz 1
#define twoDimVert0 2
#define twoDimVertR1 3
#define twoDimVertL1 4
#define twoDimVertR2 5
#define twoDimVertL2 6
#define twoDimVertR3 7
#define twoDimVertL3 8

// 1-7 bit codes
static const CCITTCode twoDimTab1[128] = { { -1, -1 },          { -1, -1 }, // 000000x
                                           { 7, twoDimVertL3 }, // 0000010
                                           { 7, twoDimVertR3 }, // 0000011
                                           { 6, twoDimVertL2 }, { 6, twoDimVertL2 }, // 000010x
                                           { 6, twoDimVertR2 }, { 6, twoDimVertR2 }, // 000011x
                                           { 4, twoDimPass },   { 4, twoDimPass }, // 0001xxx
                                           { 4, twoDimPass },   { 4, twoDimPass },   { 4, twoDimPass },   { 4, twoDimPass },   { 4, twoDimPass },   { 4, twoDimPass },   { 3, twoDimHoriz },  { 3, twoDimHoriz }, // 001xxxx
                                           { 3, twoDimHoriz },  { 3, twoDimHoriz },  { 3, twoDimHoriz },  { 3, twoDimHoriz },  { 3, twoDimHoriz },  { 3, twoDimHoriz },  { 3, twoDimHoriz },  { 3, twoDimHoriz },  { 3, twoDimHoriz },
                                           { 3, twoDimHoriz },  { 3, twoDimHoriz },  { 3, twoDimHoriz },  { 3, twoDimHoriz },  { 3, twoDimHoriz },  { 3, twoDimVertL1 }, { 3, twoDimVertL1 }, // 010xxxx
                                           { 3, twoDimVertL1 }, { 3, twoDimVertL1 }, { 3, twoDimVertL1 }, { 3, twoDimVertL1 }, { 3, twoDimVertL1 }, { 3, twoDimVertL1 }, { 3, twoDimVertL1 }, { 3, twoDimVertL1 }, { 3, twoDimVertL1 },
                                           { 3, twoDimVertL1 }, { 3, twoDimVertL1 }, { 3, twoDimVertL1 }, { 3, twoDimVertL1 }, { 3, twoDimVertL1 }, { 3, twoDimVertR1 }, { 3, twoDimVertR1 }, // 011xxxx
                                           { 3, twoDimVertR1 }, { 3, twoDimVertR1 }, { 3, twoDimVertR1 }, { 3, twoDimVertR1 }, { 3, twoDimVertR1 }, { 3, twoDimVertR1 }, { 3, twoDimVertR1 }, { 3, twoDimVertR1 }, { 3, twoDimVertR1 },
                                           { 3, twoDimVertR1 }, { 3, twoDimVertR1 }, { 3, twoDimVertR1 }, { 3, twoDimVertR1 }, { 3, twoDimVertR1 }, { 1, twoDimVert0 },  { 1, twoDimVert0 }, // 1xxxxxx
                                           { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },
                                           { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },
                                           { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },
                                           { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },
                                           { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },
                                           { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },
                                           { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 },  { 1, twoDimVert0 } };

//------------------------------------------------------------------------
// white run lengths
//------------------------------------------------------------------------

// 11-12 bit codes (upper 7 bits are 0)
static const CCITTCode whiteTab1[32] = {
    { -1, -1 }, // 00000
    { 12, ccittEOL }, // 00001
    { -1, -1 },       { -1, -1 }, // 0001x
    { -1, -1 },       { -1, -1 },   { -1, -1 }, { -1, -1 }, // 001xx
    { -1, -1 },       { -1, -1 },   { -1, -1 }, { -1, -1 }, // 010xx
    { -1, -1 },       { -1, -1 },   { -1, -1 }, { -1, -1 }, // 011xx
    { 11, 1792 },     { 11, 1792 }, // 1000x
    { 12, 1984 }, // 10010
    { 12, 2048 }, // 10011
    { 12, 2112 }, // 10100
    { 12, 2176 }, // 10101
    { 12, 2240 }, // 10110
    { 12, 2304 }, // 10111
    { 11, 1856 },     { 11, 1856 }, // 1100x
    { 11, 1920 },     { 11, 1920 }, // 1101x
    { 12, 2368 }, // 11100
    { 12, 2432 }, // 11101
    { 12, 2496 }, // 11110
    { 12, 2560 } // 11111
};

// 1-9 bit codes
static const CCITTCode whiteTab2[512] = {
    { -1, -1 },  { -1, -1 },  { -1, -1 },  { -1, -1 }, // 0000000xx
    { 8, 29 },   { 8, 29 }, // 00000010x
    { 8, 30 },   { 8, 30 }, // 00000011x
    { 8, 45 },   { 8, 45 }, // 00000100x
    { 8, 46 },   { 8, 46 }, // 00000101x
    { 7, 22 },   { 7, 22 },   { 7, 22 },   { 7, 22 }, // 0000011xx
    { 7, 23 },   { 7, 23 },   { 7, 23 },   { 7, 23 }, // 0000100xx
    { 8, 47 },   { 8, 47 }, // 00001010x
    { 8, 48 },   { 8, 48 }, // 00001011x
    { 6, 13 },   { 6, 13 },   { 6, 13 },   { 6, 13 }, // 000011xxx
    { 6, 13 },   { 6, 13 },   { 6, 13 },   { 6, 13 },   { 7, 20 },   { 7, 20 },   { 7, 20 },   { 7, 20 }, // 0001000xx
    { 8, 33 },   { 8, 33 }, // 00010010x
    { 8, 34 },   { 8, 34 }, // 00010011x
    { 8, 35 },   { 8, 35 }, // 00010100x
    { 8, 36 },   { 8, 36 }, // 00010101x
    { 8, 37 },   { 8, 37 }, // 00010110x
    { 8, 38 },   { 8, 38 }, // 00010111x
    { 7, 19 },   { 7, 19 },   { 7, 19 },   { 7, 19 }, // 0001100xx
    { 8, 31 },   { 8, 31 }, // 00011010x
    { 8, 32 },   { 8, 32 }, // 00011011x
    { 6, 1 },    { 6, 1 },    { 6, 1 },    { 6, 1 }, // 000111xxx
    { 6, 1 },    { 6, 1 },    { 6, 1 },    { 6, 1 },    { 6, 12 },   { 6, 12 },   { 6, 12 },   { 6, 12 }, // 001000xxx
    { 6, 12 },   { 6, 12 },   { 6, 12 },   { 6, 12 },   { 8, 53 },   { 8, 53 }, // 00100100x
    { 8, 54 },   { 8, 54 }, // 00100101x
    { 7, 26 },   { 7, 26 },   { 7, 26 },   { 7, 26 }, // 0010011xx
    { 8, 39 },   { 8, 39 }, // 00101000x
    { 8, 40 },   { 8, 40 }, // 00101001x
    { 8, 41 },   { 8, 41 }, // 00101010x
    { 8, 42 },   { 8, 42 }, // 00101011x
    { 8, 43 },   { 8, 43 }, // 00101100x
    { 8, 44 },   { 8, 44 }, // 00101101x
    { 7, 21 },   { 7, 21 },   { 7, 21 },   { 7, 21 }, // 0010111xx
    { 7, 28 },   { 7, 28 },   { 7, 28 },   { 7, 28 }, // 0011000xx
    { 8, 61 },   { 8, 61 }, // 00110010x
    { 8, 62 },   { 8, 62 }, // 00110011x
    { 8, 63 },   { 8, 63 }, // 00110100x
    { 8, 0 },    { 8, 0 }, // 00110101x
    { 8, 320 },  { 8, 320 }, // 00110110x
    { 8, 384 },  { 8, 384 }, // 00110111x
    { 5, 10 },   { 5, 10 },   { 5, 10 },   { 5, 10 }, // 00111xxxx
    { 5, 10 },   { 5, 10 },   { 5, 10 },   { 5, 10 },   { 5, 10 },   { 5, 10 },   { 5, 10 },   { 5, 10 },   { 5, 10 },  { 5, 10 },  { 5, 10 },  { 5, 10 },  { 5, 11 },  { 5, 11 },  { 5, 11 },  { 5, 11 }, // 01000xxxx
    { 5, 11 },   { 5, 11 },   { 5, 11 },   { 5, 11 },   { 5, 11 },   { 5, 11 },   { 5, 11 },   { 5, 11 },   { 5, 11 },  { 5, 11 },  { 5, 11 },  { 5, 11 },  { 7, 27 },  { 7, 27 },  { 7, 27 },  { 7, 27 }, // 0100100xx
    { 8, 59 },   { 8, 59 }, // 01001010x
    { 8, 60 },   { 8, 60 }, // 01001011x
    { 9, 1472 }, // 010011000
    { 9, 1536 }, // 010011001
    { 9, 1600 }, // 010011010
    { 9, 1728 }, // 010011011
    { 7, 18 },   { 7, 18 },   { 7, 18 },   { 7, 18 }, // 0100111xx
    { 7, 24 },   { 7, 24 },   { 7, 24 },   { 7, 24 }, // 0101000xx
    { 8, 49 },   { 8, 49 }, // 01010010x
    { 8, 50 },   { 8, 50 }, // 01010011x
    { 8, 51 },   { 8, 51 }, // 01010100x
    { 8, 52 },   { 8, 52 }, // 01010101x
    { 7, 25 },   { 7, 25 },   { 7, 25 },   { 7, 25 }, // 0101011xx
    { 8, 55 },   { 8, 55 }, // 01011000x
    { 8, 56 },   { 8, 56 }, // 01011001x
    { 8, 57 },   { 8, 57 }, // 01011010x
    { 8, 58 },   { 8, 58 }, // 01011011x
    { 6, 192 },  { 6, 192 },  { 6, 192 },  { 6, 192 }, // 010111xxx
    { 6, 192 },  { 6, 192 },  { 6, 192 },  { 6, 192 },  { 6, 1664 }, { 6, 1664 }, { 6, 1664 }, { 6, 1664 }, // 011000xxx
    { 6, 1664 }, { 6, 1664 }, { 6, 1664 }, { 6, 1664 }, { 8, 448 },  { 8, 448 }, // 01100100x
    { 8, 512 },  { 8, 512 }, // 01100101x
    { 9, 704 }, // 011001100
    { 9, 768 }, // 011001101
    { 8, 640 },  { 8, 640 }, // 01100111x
    { 8, 576 },  { 8, 576 }, // 01101000x
    { 9, 832 }, // 011010010
    { 9, 896 }, // 011010011
    { 9, 960 }, // 011010100
    { 9, 1024 }, // 011010101
    { 9, 1088 }, // 011010110
    { 9, 1152 }, // 011010111
    { 9, 1216 }, // 011011000
    { 9, 1280 }, // 011011001
    { 9, 1344 }, // 011011010
    { 9, 1408 }, // 011011011
    { 7, 256 },  { 7, 256 },  { 7, 256 },  { 7, 256 }, // 0110111xx
    { 4, 2 },    { 4, 2 },    { 4, 2 },    { 4, 2 }, // 0111xxxxx
    { 4, 2 },    { 4, 2 },    { 4, 2 },    { 4, 2 },    { 4, 2 },    { 4, 2 },    { 4, 2 },    { 4, 2 },    { 4, 2 },   { 4, 2 },   { 4, 2 },   { 4, 2 },   { 4, 2 },   { 4, 2 },   { 4, 2 },   { 4, 2 },
    { 4, 2 },    { 4, 2 },    { 4, 2 },    { 4, 2 },    { 4, 2 },    { 4, 2 },    { 4, 2 },    { 4, 2 },    { 4, 2 },   { 4, 2 },   { 4, 2 },   { 4, 2 },   { 4, 3 },   { 4, 3 },   { 4, 3 },   { 4, 3 }, // 1000xxxxx
    { 4, 3 },    { 4, 3 },    { 4, 3 },    { 4, 3 },    { 4, 3 },    { 4, 3 },    { 4, 3 },    { 4, 3 },    { 4, 3 },   { 4, 3 },   { 4, 3 },   { 4, 3 },   { 4, 3 },   { 4, 3 },   { 4, 3 },   { 4, 3 },
    { 4, 3 },    { 4, 3 },    { 4, 3 },    { 4, 3 },    { 4, 3 },    { 4, 3 },    { 4, 3 },    { 4, 3 },    { 4, 3 },   { 4, 3 },   { 4, 3 },   { 4, 3 },   { 5, 128 }, { 5, 128 }, { 5, 128 }, { 5, 128 }, // 10010xxxx
    { 5, 128 },  { 5, 128 },  { 5, 128 },  { 5, 128 },  { 5, 128 },  { 5, 128 },  { 5, 128 },  { 5, 128 },  { 5, 128 }, { 5, 128 }, { 5, 128 }, { 5, 128 }, { 5, 8 },   { 5, 8 },   { 5, 8 },   { 5, 8 }, // 10011xxxx
    { 5, 8 },    { 5, 8 },    { 5, 8 },    { 5, 8 },    { 5, 8 },    { 5, 8 },    { 5, 8 },    { 5, 8 },    { 5, 8 },   { 5, 8 },   { 5, 8 },   { 5, 8 },   { 5, 9 },   { 5, 9 },   { 5, 9 },   { 5, 9 }, // 10100xxxx
    { 5, 9 },    { 5, 9 },    { 5, 9 },    { 5, 9 },    { 5, 9 },    { 5, 9 },    { 5, 9 },    { 5, 9 },    { 5, 9 },   { 5, 9 },   { 5, 9 },   { 5, 9 },   { 6, 16 },  { 6, 16 },  { 6, 16 },  { 6, 16 }, // 101010xxx
    { 6, 16 },   { 6, 16 },   { 6, 16 },   { 6, 16 },   { 6, 17 },   { 6, 17 },   { 6, 17 },   { 6, 17 }, // 101011xxx
    { 6, 17 },   { 6, 17 },   { 6, 17 },   { 6, 17 },   { 4, 4 },    { 4, 4 },    { 4, 4 },    { 4, 4 }, // 1011xxxxx
    { 4, 4 },    { 4, 4 },    { 4, 4 },    { 4, 4 },    { 4, 4 },    { 4, 4 },    { 4, 4 },    { 4, 4 },    { 4, 4 },   { 4, 4 },   { 4, 4 },   { 4, 4 },   { 4, 4 },   { 4, 4 },   { 4, 4 },   { 4, 4 },
    { 4, 4 },    { 4, 4 },    { 4, 4 },    { 4, 4 },    { 4, 4 },    { 4, 4 },    { 4, 4 },    { 4, 4 },    { 4, 4 },   { 4, 4 },   { 4, 4 },   { 4, 4 },   { 4, 5 },   { 4, 5 },   { 4, 5 },   { 4, 5 }, // 1100xxxxx
    { 4, 5 },    { 4, 5 },    { 4, 5 },    { 4, 5 },    { 4, 5 },    { 4, 5 },    { 4, 5 },    { 4, 5 },    { 4, 5 },   { 4, 5 },   { 4, 5 },   { 4, 5 },   { 4, 5 },   { 4, 5 },   { 4, 5 },   { 4, 5 },
    { 4, 5 },    { 4, 5 },    { 4, 5 },    { 4, 5 },    { 4, 5 },    { 4, 5 },    { 4, 5 },    { 4, 5 },    { 4, 5 },   { 4, 5 },   { 4, 5 },   { 4, 5 },   { 6, 14 },  { 6, 14 },  { 6, 14 },  { 6, 14 }, // 110100xxx
    { 6, 14 },   { 6, 14 },   { 6, 14 },   { 6, 14 },   { 6, 15 },   { 6, 15 },   { 6, 15 },   { 6, 15 }, // 110101xxx
    { 6, 15 },   { 6, 15 },   { 6, 15 },   { 6, 15 },   { 5, 64 },   { 5, 64 },   { 5, 64 },   { 5, 64 }, // 11011xxxx
    { 5, 64 },   { 5, 64 },   { 5, 64 },   { 5, 64 },   { 5, 64 },   { 5, 64 },   { 5, 64 },   { 5, 64 },   { 5, 64 },  { 5, 64 },  { 5, 64 },  { 5, 64 },  { 4, 6 },   { 4, 6 },   { 4, 6 },   { 4, 6 }, // 1110xxxxx
    { 4, 6 },    { 4, 6 },    { 4, 6 },    { 4, 6 },    { 4, 6 },    { 4, 6 },    { 4, 6 },    { 4, 6 },    { 4, 6 },   { 4, 6 },   { 4, 6 },   { 4, 6 },   { 4, 6 },   { 4, 6 },   { 4, 6 },   { 4, 6 },
    { 4, 6 },    { 4, 6 },    { 4, 6 },    { 4, 6 },    { 4, 6 },    { 4, 6 },    { 4, 6 },    { 4, 6 },    { 4, 6 },   { 4, 6 },   { 4, 6 },   { 4, 6 },   { 4, 7 },   { 4, 7 },   { 4, 7 },   { 4, 7 }, // 1111xxxxx
    { 4, 7 },    { 4, 7 },    { 4, 7 },    { 4, 7 },    { 4, 7 },    { 4, 7 },    { 4, 7 },    { 4, 7 },    { 4, 7 },   { 4, 7 },   { 4, 7 },   { 4, 7 },   { 4, 7 },   { 4, 7 },   { 4, 7 },   { 4, 7 },
    { 4, 7 },    { 4, 7 },    { 4, 7 },    { 4, 7 },    { 4, 7 },    { 4, 7 },    { 4, 7 },    { 4, 7 },    { 4, 7 },   { 4, 7 },   { 4, 7 },   { 4, 7 }
};

//------------------------------------------------------------------------
// black run lengths
//------------------------------------------------------------------------

// 10-13 bit codes (upper 6 bits are 0)
static const CCITTCode blackTab1[128] = { { -1, -1 },       { -1, -1 }, // 000000000000x
                                          { 12, ccittEOL }, { 12, ccittEOL }, // 000000000001x
                                          { -1, -1 },       { -1, -1 },       { -1, -1 },   { -1, -1 }, // 00000000001xx
                                          { -1, -1 },       { -1, -1 },       { -1, -1 },   { -1, -1 }, // 00000000010xx
                                          { -1, -1 },       { -1, -1 },       { -1, -1 },   { -1, -1 }, // 00000000011xx
                                          { -1, -1 },       { -1, -1 },       { -1, -1 },   { -1, -1 }, // 00000000100xx
                                          { -1, -1 },       { -1, -1 },       { -1, -1 },   { -1, -1 }, // 00000000101xx
                                          { -1, -1 },       { -1, -1 },       { -1, -1 },   { -1, -1 }, // 00000000110xx
                                          { -1, -1 },       { -1, -1 },       { -1, -1 },   { -1, -1 }, // 00000000111xx
                                          { 11, 1792 },     { 11, 1792 },     { 11, 1792 }, { 11, 1792 }, // 00000001000xx
                                          { 12, 1984 },     { 12, 1984 }, // 000000010010x
                                          { 12, 2048 },     { 12, 2048 }, // 000000010011x
                                          { 12, 2112 },     { 12, 2112 }, // 000000010100x
                                          { 12, 2176 },     { 12, 2176 }, // 000000010101x
                                          { 12, 2240 },     { 12, 2240 }, // 000000010110x
                                          { 12, 2304 },     { 12, 2304 }, // 000000010111x
                                          { 11, 1856 },     { 11, 1856 },     { 11, 1856 }, { 11, 1856 }, // 00000001100xx
                                          { 11, 1920 },     { 11, 1920 },     { 11, 1920 }, { 11, 1920 }, // 00000001101xx
                                          { 12, 2368 },     { 12, 2368 }, // 000000011100x
                                          { 12, 2432 },     { 12, 2432 }, // 000000011101x
                                          { 12, 2496 },     { 12, 2496 }, // 000000011110x
                                          { 12, 2560 },     { 12, 2560 }, // 000000011111x
                                          { 10, 18 },       { 10, 18 },       { 10, 18 },   { 10, 18 }, // 0000001000xxx
                                          { 10, 18 },       { 10, 18 },       { 10, 18 },   { 10, 18 },   { 12, 52 }, { 12, 52 }, // 000000100100x
                                          { 13, 640 }, // 0000001001010
                                          { 13, 704 }, // 0000001001011
                                          { 13, 768 }, // 0000001001100
                                          { 13, 832 }, // 0000001001101
                                          { 12, 55 },       { 12, 55 }, // 000000100111x
                                          { 12, 56 },       { 12, 56 }, // 000000101000x
                                          { 13, 1280 }, // 0000001010010
                                          { 13, 1344 }, // 0000001010011
                                          { 13, 1408 }, // 0000001010100
                                          { 13, 1472 }, // 0000001010101
                                          { 12, 59 },       { 12, 59 }, // 000000101011x
                                          { 12, 60 },       { 12, 60 }, // 000000101100x
                                          { 13, 1536 }, // 0000001011010
                                          { 13, 1600 }, // 0000001011011
                                          { 11, 24 },       { 11, 24 },       { 11, 24 },   { 11, 24 }, // 00000010111xx
                                          { 11, 25 },       { 11, 25 },       { 11, 25 },   { 11, 25 }, // 00000011000xx
                                          { 13, 1664 }, // 0000001100100
                                          { 13, 1728 }, // 0000001100101
                                          { 12, 320 },      { 12, 320 }, // 000000110011x
                                          { 12, 384 },      { 12, 384 }, // 000000110100x
                                          { 12, 448 },      { 12, 448 }, // 000000110101x
                                          { 13, 512 }, // 0000001101100
                                          { 13, 576 }, // 0000001101101
                                          { 12, 53 },       { 12, 53 }, // 000000110111x
                                          { 12, 54 },       { 12, 54 }, // 000000111000x
                                          { 13, 896 }, // 0000001110010
                                          { 13, 960 }, // 0000001110011
                                          { 13, 1024 }, // 0000001110100
                                          { 13, 1088 }, // 0000001110101
                                          { 13, 1152 }, // 0000001110110
                                          { 13, 1216 }, // 0000001110111
                                          { 10, 64 },       { 10, 64 },       { 10, 64 },   { 10, 64 }, // 0000001111xxx
                                          { 10, 64 },       { 10, 64 },       { 10, 64 },   { 10, 64 } };

// 7-12 bit codes (upper 4 bits are 0)
static const CCITTCode blackTab2[192] = {
    { 8, 13 },   { 8, 13 },  { 8, 13 },  { 8, 13 }, // 00000100xxxx
    { 8, 13 },   { 8, 13 },  { 8, 13 },  { 8, 13 },  { 8, 13 },   { 8, 13 }, { 8, 13 }, { 8, 13 }, { 8, 13 }, { 8, 13 }, { 8, 13 }, { 8, 13 }, { 11, 23 }, { 11, 23 }, // 00000101000x
    { 12, 50 }, // 000001010010
    { 12, 51 }, // 000001010011
    { 12, 44 }, // 000001010100
    { 12, 45 }, // 000001010101
    { 12, 46 }, // 000001010110
    { 12, 47 }, // 000001010111
    { 12, 57 }, // 000001011000
    { 12, 58 }, // 000001011001
    { 12, 61 }, // 000001011010
    { 12, 256 }, // 000001011011
    { 10, 16 },  { 10, 16 }, { 10, 16 }, { 10, 16 }, // 0000010111xx
    { 10, 17 },  { 10, 17 }, { 10, 17 }, { 10, 17 }, // 0000011000xx
    { 12, 48 }, // 000001100100
    { 12, 49 }, // 000001100101
    { 12, 62 }, // 000001100110
    { 12, 63 }, // 000001100111
    { 12, 30 }, // 000001101000
    { 12, 31 }, // 000001101001
    { 12, 32 }, // 000001101010
    { 12, 33 }, // 000001101011
    { 12, 40 }, // 000001101100
    { 12, 41 }, // 000001101101
    { 11, 22 },  { 11, 22 }, // 00000110111x
    { 8, 14 },   { 8, 14 },  { 8, 14 },  { 8, 14 }, // 00000111xxxx
    { 8, 14 },   { 8, 14 },  { 8, 14 },  { 8, 14 },  { 8, 14 },   { 8, 14 }, { 8, 14 }, { 8, 14 }, { 8, 14 }, { 8, 14 }, { 8, 14 }, { 8, 14 }, { 7, 10 },  { 7, 10 },  { 7, 10 }, { 7, 10 }, // 0000100xxxxx
    { 7, 10 },   { 7, 10 },  { 7, 10 },  { 7, 10 },  { 7, 10 },   { 7, 10 }, { 7, 10 }, { 7, 10 }, { 7, 10 }, { 7, 10 }, { 7, 10 }, { 7, 10 }, { 7, 10 },  { 7, 10 },  { 7, 10 }, { 7, 10 },
    { 7, 10 },   { 7, 10 },  { 7, 10 },  { 7, 10 },  { 7, 10 },   { 7, 10 }, { 7, 10 }, { 7, 10 }, { 7, 10 }, { 7, 10 }, { 7, 10 }, { 7, 10 }, { 7, 11 },  { 7, 11 },  { 7, 11 }, { 7, 11 }, // 0000101xxxxx
    { 7, 11 },   { 7, 11 },  { 7, 11 },  { 7, 11 },  { 7, 11 },   { 7, 11 }, { 7, 11 }, { 7, 11 }, { 7, 11 }, { 7, 11 }, { 7, 11 }, { 7, 11 }, { 7, 11 },  { 7, 11 },  { 7, 11 }, { 7, 11 },
    { 7, 11 },   { 7, 11 },  { 7, 11 },  { 7, 11 },  { 7, 11 },   { 7, 11 }, { 7, 11 }, { 7, 11 }, { 7, 11 }, { 7, 11 }, { 7, 11 }, { 7, 11 }, { 9, 15 },  { 9, 15 },  { 9, 15 }, { 9, 15 }, // 000011000xxx
    { 9, 15 },   { 9, 15 },  { 9, 15 },  { 9, 15 },  { 12, 128 }, // 000011001000
    { 12, 192 }, // 000011001001
    { 12, 26 }, // 000011001010
    { 12, 27 }, // 000011001011
    { 12, 28 }, // 000011001100
    { 12, 29 }, // 000011001101
    { 11, 19 },  { 11, 19 }, // 00001100111x
    { 11, 20 },  { 11, 20 }, // 00001101000x
    { 12, 34 }, // 000011010010
    { 12, 35 }, // 000011010011
    { 12, 36 }, // 000011010100
    { 12, 37 }, // 000011010101
    { 12, 38 }, // 000011010110
    { 12, 39 }, // 000011010111
    { 11, 21 },  { 11, 21 }, // 00001101100x
    { 12, 42 }, // 000011011010
    { 12, 43 }, // 000011011011
    { 10, 0 },   { 10, 0 },  { 10, 0 },  { 10, 0 }, // 0000110111xx
    { 7, 12 },   { 7, 12 },  { 7, 12 },  { 7, 12 }, // 0000111xxxxx
    { 7, 12 },   { 7, 12 },  { 7, 12 },  { 7, 12 },  { 7, 12 },   { 7, 12 }, { 7, 12 }, { 7, 12 }, { 7, 12 }, { 7, 12 }, { 7, 12 }, { 7, 12 }, { 7, 12 },  { 7, 12 },  { 7, 12 }, { 7, 12 },
    { 7, 12 },   { 7, 12 },  { 7, 12 },  { 7, 12 },  { 7, 12 },   { 7, 12 }, { 7, 12 }, { 7, 12 }, { 7, 12 }, { 7, 12 }, { 7, 12 }, { 7, 12 }
};

// 2-6 bit codes
static const CCITTCode blackTab3[64] = { { -1, -1 }, { -1, -1 }, { -1, -1 }, { -1, -1 }, // 0000xx
                                         { 6, 9 }, // 000100
                                         { 6, 8 }, // 000101
                                         { 5, 7 },   { 5, 7 }, // 00011x
                                         { 4, 6 },   { 4, 6 },   { 4, 6 },   { 4, 6 }, // 0010xx
                                         { 4, 5 },   { 4, 5 },   { 4, 5 },   { 4, 5 }, // 0011xx
                                         { 3, 1 },   { 3, 1 },   { 3, 1 },   { 3, 1 }, // 010xxx
                                         { 3, 1 },   { 3, 1 },   { 3, 1 },   { 3, 1 },   { 3, 4 }, { 3, 4 }, { 3, 4 }, { 3, 4 }, // 011xxx
                                         { 3, 4 },   { 3, 4 },   { 3, 4 },   { 3, 4 },   { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, // 10xxxx
                                         { 2, 3 },   { 2, 3 },   { 2, 3 },   { 2, 3 },   { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 3 }, { 2, 2 }, { 2, 2 }, { 2, 2 }, { 2, 2 }, // 11xxxx
                                         { 2, 2 },   { 2, 2 },   { 2, 2 },   { 2, 2 },   { 2, 2 }, { 2, 2 }, { 2, 2 }, { 2, 2 }, { 2, 2 }, { 2, 2 }, { 2, 2 }, { 2, 2 } };

#endif
